在做 CD Pipeline 之前我們先測看看 deploy 的 command 是否可以使用。
cd deploy/kubernetes/ithome_crawler
helm upgrade ithome-crawler . --install --namespace {{ NAMESPACE }}\
    --set schedule="50 20 * * *" \
    --set env.mongo.host={{ MONGO_HOST }} \
    --set env.mongo.db=ithome_ironman
這邊我們會在 kubernetes 起出一個 cronjob ,並在 "50 20 * * *" 時,會幫我們自動起出一個 Pod 執行爬蟲任務。
確認資料是否寫入 MongoDB

Jenkinsfile.CD
Deploy to k8s 時,會以 helm upgrade --install 更新在 k8s 上的 Cronjob 設定。pipeline{
    agent {
            label 'gcp-agent-1'
        }
    parameters {
        string(name: 'IMAGE_TAG', defaultValue: 'latest')
        string(name: 'K8S_CRONJOB')
    }
    environment {
        K8S_NAMESPACE = "prod"
    }
    stages{
        stage("Deploy to k8s"){
            steps{
                withCredentials([string(credentialsId: 'mongo-connection', variable: 'MONGO_HOST')]){
                    script{
                        sh """
                        helm upgrade ithome-crawler deploy/kubernetes/ithome_crawler --install --namespace ${K8S_NAMESPACE}\
                            --set schedule="${K8S_CRONJOB}" \
                            --set env.mongo.host="${MONGO_HOST}" \
                            --set env.mongo.db=ithome_ironman \
                            --set image.tag=${IMAGE_TAG}
                        """
                    }
                }
            }
        }
    }
    post{
        always{
            cleanWs()
        }
    }
}
在 CD pipeline 中,我們設定將 latest 的 image 指定為我們 Pod 啟動時的 image 檔案。
Jenkins pipeline 執行結果
